
/**
 * 该C文件和其它的C文件不同，其它的C文件中变量前将会有 extern 关键字
 * 但 global.c 没有，也就意味着 global.c 下的变量会和其它C文件下的有所不同
 */

#define GLOBAL_VARIABLES_HERE

#include "type.h"
#include "const.h"
#include "protect.h"
#include "fs.h"
#include "tty.h"
#include "console.h"
#include "proc.h"
#include "global.h"
#include "proto.h"

// 进程表
PUBLIC struct proc proc_table[NR_TASKS + NR_PROCS];

// 所有进程栈大小的总和
PUBLIC char task_stack[STACK_SIZE_TOTAL];

// 进程管理表
// 责任：记录一个任务(进程)的开始地址、堆栈等信息
PUBLIC struct task task_table[NR_TASKS] = {
                                        //进程体    堆栈          进程名
                                        {task_tty, STACK_SIZE_TTY, "tty"},
                                        {task_sys, STACK_SIZE_SYS, "sys"},
                                        {task_hd, STACK_SIZE_HD, "hd"},    // 先有的 HD 进程
                                        {task_fs, STACK_SIZE_FS, "fs"},    // 后有的 FS 进程，FS 需要请求 HD，所以 HD 要先加载
                                   };

PUBLIC struct task user_proc_table[NR_PROCS] = {
                                        //进程体    堆栈          进程名
                                        {TestA, STACK_SIZE_TESTA, "TestA"}, 
                                        {TestB, STACK_SIZE_TESTB, "TestB"},
                                        {TestC, STACK_SIZE_TESTC, "TestC"},
                                   };

// 保存所有中断的中断处理函数
PUBLIC irq_handler irq_table[NR_IRQ];

// 保存所有系统调用的处理函数
PUBLIC	system_call	sys_call_table[NR_SYS_CALL] = {sys_printx,
						       sys_sendrec};

PUBLIC TTY tty_table[NR_CONSOLES];
PUBLIC CONSOLE console_table[NR_CONSOLES];

/* FS 相关如下 */
/*****************************************************************************/
/**
 * 对于 dd_map[k]，
 * `k' 是设备编号。\ dd_map[k].driver_nr 是驱动程序编号。
 *
 * 如果顺序更改，请记住修改 include/const.h。
 *****************************************************************************/
struct dev_drv_map dd_map[] = {
	/* 驱动编号     		主要设备编号
	   ----------		---------------- */
	{INVALID_DRIVER},	/**< 0 : Unused */
	{INVALID_DRIVER},	/**< 1 : 为软盘驱动程序保留 */
	{INVALID_DRIVER},	/**< 2 : 为 cdrom 驱动程序保留 */
	{TASK_HD},		    /**< 3 : Hard disk */
	{TASK_TTY},		    /**< 4 : TTY */
	{INVALID_DRIVER}	/**< 5 : 为 scsi 磁盘驱动程序保留 */
};

/**
 * 6MB~7MB：FS 缓冲区
 */
PUBLIC	u8 *		fsbuf		= (u8*)0x600000;
PUBLIC	const int	FSBUF_SIZE	= 0x100000;


